#include <bits/stdc++.h>
/*
AcWing 801. 二进制中1的个数
1、题目（来源于AcWing）：
给定一个长度为n的数列，请你求出数列中每个数的二进制表示中1的个数。

输入格式
第一行包含整数n。

第二行包含n个整数，表示整个数列。

输出格式
共一行，包含n个整数，其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。

数据范围
1≤n≤100000,
0≤数列中元素的值≤109

输入样例：
5
1 2 3 4 5
输出样例：
1 1 2 1 2

2、基本思想：
用 x & -x 返回 x 中最后一位 1。比如对于0…01001000(32位）返回1000，对于0…010110100(32位）返回100。每一次减掉最后一位1，看总共减了几次就能得到二进制有几个1。

3、步骤：
①写一个lowbit函数返回 x & -x。
②循环减去最后一位1，并计数。
————————————————
版权声明：本文为CSDN博主「YAOSHIAO」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/YSA__/article/details/107385505
*/
using namespace std;
int n;
int *a = NULL;
inline int lowbit(int n){
    return n&(-n);//返回地最低位的1和更低位的0     010【100】=> 100   111010111【10】=> 【10】
}
int main()
{
    cin>>n;
    a = new int[n+10];
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }

    for(int i=1;i<=n;i++){
        int cnt = 0;
        while(a[i]){
            int temp = lowbit(a[i]);
            a[i]-=temp;
            cnt++;//每循环一次就少一个1
        }
        cout<<cnt<<" ";
    }

    return 0;
}
